home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
ident
/
tools
/
pident.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-09
|
3KB
|
130 lines
/*
** pident.c Another small test program.
**
** Compile this program and then link with
*/
#define USAGE "usage: %s localhost localport remotehost remoteport protocol\n"
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <pwd.h>
#include <sys/types.h>
#include <netinet/in.h>
#ifndef HPUX7
# include <arpa/inet.h>
#endif
#ifdef HAVE_KVM
# include <kvm.h>
#else
# include "kvm.h"
#endif
#include <sys/types.h>
#include <sys/stat.h>
#if defined(MIPS) || defined(BSD43)
extern int errno;
#endif
#include "identd.h"
#include "error.h"
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <netdb.h>
#include <pwd.h>
int debug_flag = 0;
int syslog_flag = 1;
char *path_kmem = NULL;
char *path_unix = NULL;
int lport, fport;
syslog(priority, message)
int priority;
char * message;
{
printf("%s\n", message);
}
main(argc,argv)
int argc;
char *argv[];
{
int fd;
struct sockaddr_in laddr, faddr;
struct in_addr *lsin_addr, *fsin_addr;
int addrlen;
int uid;
struct servent *Servent;
struct hostent *Hostent;
struct passwd *pwp;
if (argc != 6)
{
printf(USAGE, argv[0]);
exit(2);
}
/*
** Open the kernel memory device and read the nlist table
*/
if (k_open() < 0)
printf("unable to examine memory\n");
laddr.sin_family = AF_INET;
if ((laddr.sin_addr.s_addr = inet_addr(argv[1])) == -1) {
if ((Hostent = gethostbyname(argv[1])) == (struct hostent *)0) {
perror("gethostbyname");
exit(2);
}
laddr.sin_addr.s_addr =
inet_addr(inet_ntoa(*(struct in_addr *)(Hostent->h_addr_list[0])));
}
lport = atoi(argv[2]);
if ( lport == 0) {
if ((Servent = getservbyname(argv[2], argv[5])) == (struct servent *)0) {
perror("getserverbyname");
exit(2);
}
lport = ntohs(Servent->s_port);
}
faddr.sin_family = AF_INET;
if ((faddr.sin_addr.s_addr = inet_addr(argv[3])) == -1) {
if ((Hostent = gethostbyname(argv[3])) == (struct hostent *)0) {
perror("gethostbyname");
exit(2);
}
faddr.sin_addr.s_addr =
inet_addr(inet_ntoa(*(struct in_addr *)(Hostent->h_addr_list[0])));
}
fport = atoi(argv[4]);
if ( fport == 0) {
if ((Servent = getservbyname(argv[4], argv[5])) == (struct servent *)0) {
perror("getserverbyname");
exit(2);
}
fport = ntohs(Servent->s_port);
}
lsin_addr = &laddr.sin_addr;
fsin_addr = &faddr.sin_addr;
if (k_getuid(fsin_addr, htons(fport),
lsin_addr, htons(lport), &uid) != -1) {
pwp = getpwuid(uid);
printf("uid = %d (%s)\n",uid, pwp ? pwp->pw_name : "unknown user");
}
exit(0);
}